﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Client.Encriptacion.logica
{
    class Funcion_S
    {
        //constructor
        Funcion_S() { }

        //metodo
        public static BitArray [] funcion_s(BitArray [] entrada)
        { 
            //throw new NotImplementedException();
            BitArray[] partes = new BitArray[8];
            
            int tamano = entrada.Length / 8;
            int h;
            for (int i = 0; i < 8 ; i++)
            {
                BitArray trozo = entrada[i];
                BitArray fila = new BitArray(2);
                BitArray columna = new BitArray(4);
                h = 64 * i;
                fila[0] = trozo[0];
                fila[1] = trozo[5];

                for (int j = 1 ; j < 5 ; j++ )
                {
                    columna[j-1] = trozo[j]; 
                }

                int num = 0; 
                int k = 1;
                int p = 0;
                while(k>=0)
                {
                    if (fila[k] == true)
                    {
                        num = num + Convert.ToInt32(Math.Pow(2,p));
 
                    }
                    p++;
                    k--;
                }
                //Console.WriteLine(num);
                int col = 0;
                int q = 0;
                int l = 3;
                while (l >= 0)
                {
                    if (columna[l] == true)
                    {
                        col = col + Convert.ToInt32(Math.Pow(2, q));

                    }
                    q++;
                    l--;
                }
                //Console.WriteLine(col);
                int valor = 0;
                valor = Cajas.S_Caja[64 * i + num * 16 + col];
                byte[] val = new byte[1] { byte.Parse(valor.ToString()) };
                BitArray b = new BitArray(val);
                BitArray r = new BitArray(4);
                for (int g = 0; g < 4; g++)
                {
                    r[g] = b[3 - g];        
                }
                //Console.WriteLine("iteracion es : {0}", i);
                //IO.ImprimeBitArray(r, 4);
                partes[i] = r;
            }
            return partes;
        }
        

    }
}
